#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

pthread_mutex_t mutex; // 创建锁

void *pthread_func1(void *arg)
{
  while (1)
  {
    pthread_mutex_lock(&mutex); // 上锁
    printf("hello ");
    sleep(1);
    printf("world\n");
    pthread_mutex_unlock(&mutex); // 解锁
    sleep(1);
  }
}

void *pthread_func2(void *arg)
{
  while (1)
  {
    pthread_mutex_lock(&mutex); // 上锁
    printf("HELLO ");
    sleep(1);
    printf("WORLD\n");
    pthread_mutex_unlock(&mutex); // 解锁
    sleep(1);
  }
}

int main()
{

  pthread_mutex_init(&mutex, NULL); // 初始化锁

  // 创建两个线程
  pthread_t t1, t2;
  int ret;
  ret = pthread_create(&t1, NULL, pthread_func1, NULL);
  if (ret != 0)
  {
    fprintf(stderr, "pthread_create1:%s\n", strerror(ret));
    exit(1);
  }
  ret = pthread_create(&t2, NULL, pthread_func2, NULL);
  if (ret != 0)
  {
    fprintf(stderr, "pthread_create2:%s\n", strerror(ret));
    exit(1);
  }
  // 销毁锁
  // pthread_mutex_destroy(&mutex);
  // pthread_mutex_trylock(&mutex); // 尝试上锁,上锁失败返回错误码

  while (1)
  {
  }
}